package com.mingqijia.gassafety.shared.cqrs;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mingqijia.gassafety.db.entity.auth.BaseEntry;
import com.mingqijia.gassafety.shared.utils.ApplicationUtils;
import org.springframework.util.StringUtils;

/**
 * @author Damon S.
 * @version v1.0.1
 * @date 2020年01月20日 15:58
 */
public interface QueryHandler<E extends BaseEntry> {

    /**
     * 创建分页对象
     * @param pageable 分页参数
     * @return 返回分页对象
     */
    default Page<E> createPage(Pageable pageable) {
        return new Page<>(pageable.getPage(), pageable.getPageSize());
    }

    /**
     * 对操作命令附加操作人信息
     * @param command 操作命令
     */
    default void attachOperator2Command(Command command) {
        if (command instanceof UpdateCommand) {
            UpdateCommand updateCommand = (UpdateCommand) command;
            if (StringUtils.hasText(updateCommand.getUpdatedBy())) {
                return;
            }
            updateCommand.setUpdatedBy(ApplicationUtils.getUserId());
        } else if (command instanceof CreateCommand) {
            CreateCommand createCommand = (CreateCommand) command;
            if (!StringUtils.hasText(createCommand.getSpId())) {
                // 使用 headerSpId 还是 workingSpId ?
                createCommand.setSpId(ApplicationUtils.getHeaderSpId());
            }
            if (StringUtils.hasText(createCommand.getCreatedBy())) {
                return;
            }
            createCommand.setCreatedBy(ApplicationUtils.getUserId());
        }
    }
}
